﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
using System.Data;
using System.Data.SqlClient;

namespace DAO
{
    public class LichChayDAO
    {
        public static List<LichChay> Select_All()
        {
            List<LichChay> list = new List<LichChay>();
            String strSql = "select x.MaXe,BienSo,td.MaTuyenDuong,TenTuyenDuong,Ngay,GioXuatBen,nv1.TenNhanVien as 'TenTaiChinh',";
            strSql += "nv2.TenNhanVien as 'TenTaiPhu',nv3.TenNhanVien as 'TenTiepVien',TaiChinh,TaiPhu,TiepVien ";
            strSql += "from LichChay lc,NhanVien nv1,NhanVien nv2,NhanVien nv3,TuyenDuong td,Xe x ";
            strSql += "where lc.MaXe=x.MaXe and lc.MaTuyenDuong=td.MaTuyenDuong and lc.TaiChinh=nv1.MaNhanVien ";
            strSql += "and lc.TaiPhu=nv2.MaNhanVien and lc.TiepVien=nv3.MaNhanVien and DateDiff(DAY,GETDATE(),lc.Ngay)>=0";

            try
            {
                DataTable dt = SqlDataAccessHelper.ExcuteQuery(strSql);
                foreach (DataRow dr in dt.Rows)
                {
                    LichChay emp = new LichChay();
                    emp.MaXe = dr["MaXe"].ToString();
                    emp.BienSo = dr["BienSo"].ToString();
                    emp.MaTuyenDuong = dr["MaTuyenDuong"].ToString();
                    emp.TenTuyenDuong = dr["TenTuyenDuong"].ToString();
                    emp.Ngay = dr["Ngay"].ToString();
                    emp.GioXuatBen = dr["GioXuatBen"].ToString();
                    emp.TaiChinh = dr["TaiChinh"].ToString();
                    emp.TaiPhu = dr["TaiPhu"].ToString();
                    emp.TiepVien = dr["TiepVien"].ToString();
                    emp.TenTaiChinh = dr["TenTaiChinh"].ToString();
                    emp.TenTaiPhu = dr["TenTaiPhu"].ToString();
                    emp.TenTiepVien = dr["TenTiepVien"].ToString();
                    list.Add(emp);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return list;
        }

        public static List<LichChay> Select_by_TenTuyenDuong(String TenTD)
        {
            List<LichChay> list = new List<LichChay>();
            String strSql = "select x.MaXe,BienSo,td.MaTuyenDuong,TenTuyenDuong,Ngay,GioXuatBen,nv1.TenNhanVien as 'TenTaiChinh',";
            strSql += "nv2.TenNhanVien as 'TenTaiPhu',nv3.TenNhanVien as 'TenTiepVien',TaiChinh,TaiPhu,TiepVien ";
            strSql += "from LichChay lc,NhanVien nv1,NhanVien nv2,NhanVien nv3,TuyenDuong td,Xe x ";
            strSql += "where lc.MaXe=x.MaXe and lc.MaTuyenDuong=td.MaTuyenDuong and lc.TaiChinh=nv1.MaNhanVien ";
            strSql += "and lc.TaiPhu=nv2.MaNhanVien and lc.TiepVien=nv3.MaNhanVien and DateDiff(DAY,GETDATE(),lc.Ngay)>=0 and TenTuyenDuong like N'%" + TenTD + "%'";

            try
            {
                DataTable dt = SqlDataAccessHelper.ExcuteQuery(strSql);
                foreach (DataRow dr in dt.Rows)
                {
                    LichChay emp = new LichChay();
                    emp.MaXe = dr["MaXe"].ToString();
                    emp.BienSo = dr["BienSo"].ToString();
                    emp.MaTuyenDuong = dr["MaTuyenDuong"].ToString();
                    emp.TenTuyenDuong = dr["TenTuyenDuong"].ToString();
                    emp.Ngay = dr["Ngay"].ToString();
                    emp.GioXuatBen = dr["GioXuatBen"].ToString();
                    emp.TaiChinh = dr["TaiChinh"].ToString();
                    emp.TaiPhu = dr["TaiPhu"].ToString();
                    emp.TiepVien = dr["TiepVien"].ToString();
                    emp.TenTaiChinh = dr["TenTaiChinh"].ToString();
                    emp.TenTaiPhu = dr["TenTaiPhu"].ToString();
                    emp.TenTiepVien = dr["TenTiepVien"].ToString();
                    list.Add(emp);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return list;
        }

        public static List<LichChay> Select_TuyenDuong_by_Ngay(String Ngay)
        {
            List<LichChay> list = new List<LichChay>();
            String strSql = "select DISTINCT td.MaTuyenDuong,TenTuyenDuong from LichChay lc,TuyenDuong td where ";
            strSql += "lc.MaTuyenDuong=td.MaTuyenDuong and Ngay='" + Ngay + "'";

            try
            {
                DataTable dt = SqlDataAccessHelper.ExcuteQuery(strSql);
                foreach (DataRow dr in dt.Rows)
                {
                    LichChay emp = new LichChay();
                    emp.MaTuyenDuong = dr["MaTuyenDuong"].ToString();
                    emp.TenTuyenDuong = dr["TenTuyenDuong"].ToString();
                    list.Add(emp);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return list;
        }

        public static List<LichChay> Search(LichChay emp)
        {
            List<LichChay> list = new List<LichChay>();
            String strSql = "select x.MaXe,BienSo,td.MaTuyenDuong,TenTuyenDuong,Ngay,GioXuatBen,nv1.TenNhanVien as 'TenTaiChinh',";
            strSql += "nv2.TenNhanVien as 'TenTaiPhu',nv3.TenNhanVien as 'TenTiepVien',TaiChinh,TaiPhu,TiepVien ";
            strSql += "from LichChay lc,NhanVien nv1,NhanVien nv2,NhanVien nv3,TuyenDuong td,Xe x ";
            strSql += "where lc.MaXe=x.MaXe and lc.MaTuyenDuong=td.MaTuyenDuong and lc.TaiChinh=nv1.MaNhanVien ";
            strSql += "and lc.TaiPhu=nv2.MaNhanVien and lc.TiepVien=nv3.MaNhanVien ";
            strSql += "and TenTuyenDuong like N'%" + emp.TenTuyenDuong + "%' and BienSo ='" + emp.BienSo + "' and Ngay='" + emp.Ngay + "' ";
            strSql += "and nv1.TenNhanVien like N'%" + emp.TenTaiChinh + "%' and nv2.TenNhanVien like N'%" + emp.TenTaiPhu + "%' ";
            strSql += "and nv3.TenNhanVien like N'%" + emp.TenTiepVien + "%' ";
            if (!emp.GioXuatBen.Equals(""))
                strSql += "and GioXuatBen='" + emp.GioXuatBen + "'";

            try
            {
                DataTable dt = SqlDataAccessHelper.ExcuteQuery(strSql);
                foreach (DataRow dr in dt.Rows)
                {
                    LichChay emp2 = new LichChay();
                    emp2.MaXe = dr["MaXe"].ToString();
                    emp2.BienSo = dr["BienSo"].ToString();
                    emp2.MaTuyenDuong = dr["MaTuyenDuong"].ToString();
                    emp2.TenTuyenDuong = dr["TenTuyenDuong"].ToString();
                    emp2.Ngay = dr["Ngay"].ToString();
                    emp2.GioXuatBen = dr["GioXuatBen"].ToString();
                    emp2.TaiChinh = dr["TaiChinh"].ToString();
                    emp2.TaiPhu = dr["TaiPhu"].ToString();
                    emp2.TiepVien = dr["TiepVien"].ToString();
                    emp2.TenTaiChinh = dr["TenTaiChinh"].ToString();
                    emp2.TenTaiPhu = dr["TenTaiPhu"].ToString();
                    emp2.TenTiepVien = dr["TenTiepVien"].ToString();
                    list.Add(emp2);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return list;
        }

        public static bool Insert(LichChay emp)
        {
            bool result = false;
            string strSql = "insert into LichChay ";
            strSql += "values(@MaXe,@MaTuyenDuong,@Ngay,@GioXuatBen,@TaiChinh,@TaiPhu,@TiepVien)";

            try
            {
                List<SqlParameter> sqlPara = new List<SqlParameter>();
                sqlPara.Add(new SqlParameter("@MaXe", emp.MaXe));
                sqlPara.Add(new SqlParameter("@MaTuyenDuong", emp.MaTuyenDuong));
                sqlPara.Add(new SqlParameter("@Ngay", DateTime.Parse(emp.Ngay)));
                sqlPara.Add(new SqlParameter("@GioXuatBen", emp.GioXuatBen));
                sqlPara.Add(new SqlParameter("@TaiChinh", emp.TaiChinh));
                sqlPara.Add(new SqlParameter("@TaiPhu", emp.TaiPhu));
                sqlPara.Add(new SqlParameter("@TiepVien", emp.TiepVien));

                int n = SqlDataAccessHelper.ExcuteNoneQuery(strSql, sqlPara);
                if (n == 1)
                    result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

        public static List<LichChay> Select_GioXuatBen_ThemVe(String MaTD, String MaXe)
        {
            List<LichChay> list = new List<LichChay>();
            String strSql = "select GioXuatBen from LichChay where MaTuyenDuong='" + MaTD + "' and MaXe='" + MaXe + "' and DateDiff(DAY,GETDATE(),Ngay)=0";

            try
            {
                DataTable dt = SqlDataAccessHelper.ExcuteQuery(strSql);
                foreach (DataRow dr in dt.Rows)
                {
                    LichChay emp = new LichChay();
                    emp.GioXuatBen = dr["GioXuatBen"].ToString();
                    list.Add(emp);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return list;
        }

        public static bool Delete(String MaXe,String MaTD,String Ngay,String GioXuatBen)
        {
            bool result = false;
            string strSql = "delete from LichChay where ";
            strSql += "MaXe=@MaXe and MaTuyenDuong=@MaTD and Ngay=@Ngay and GioXuatBen=@GioXB";

            try
            {
                List<SqlParameter> sqlPara = new List<SqlParameter>();
                sqlPara.Add(new SqlParameter("@MaXe", MaXe));
                sqlPara.Add(new SqlParameter("@MaTD", MaTD));
                sqlPara.Add(new SqlParameter("@Ngay", Ngay));
                sqlPara.Add(new SqlParameter("@GioXB", GioXuatBen));

                int n = SqlDataAccessHelper.ExcuteNoneQuery(strSql, sqlPara);
                if (n == 1)
                    result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

        public static bool Update(LichChay emp_cu,LichChay emp_moi)
        {
            bool result = false;
            string strSql = "update LichChay set ";
            strSql += "MaXe=@MaXeMoi,MaTuyenDuong=@MaTDMoi,Ngay=@NgayMoi,GioXuatBen=@GioXBMoi,TaiChinh=@TaiChinhMoi,";
            strSql += "TaiPhu=@TaiPhuMoi,TiepVien=@TiepVienMoi ";
            strSql += "where MaXe=@MaXeCu and MaTuyenDuong=@MaTDCu and Ngay=@NgayCu and GioXuatBen=@GioXBCu";

            try
            {
                List<SqlParameter> sqlPara = new List<SqlParameter>();
                sqlPara.Add(new SqlParameter("@MaXeCu", emp_cu.MaXe));
                sqlPara.Add(new SqlParameter("@MaTDCu", emp_cu.MaTuyenDuong));
                sqlPara.Add(new SqlParameter("@NgayCu", emp_cu.Ngay));
                sqlPara.Add(new SqlParameter("@GioXBCu", emp_cu.GioXuatBen));

                sqlPara.Add(new SqlParameter("@MaXeMoi", emp_moi.MaXe));
                sqlPara.Add(new SqlParameter("@MaTDMoi", emp_moi.MaTuyenDuong));
                sqlPara.Add(new SqlParameter("@NgayMoi", emp_moi.Ngay));
                sqlPara.Add(new SqlParameter("@GioXBMoi", emp_moi.GioXuatBen));
                sqlPara.Add(new SqlParameter("@TaiChinhMoi", emp_moi.TaiChinh));
                sqlPara.Add(new SqlParameter("@TaiPhuMoi", emp_moi.TaiPhu));
                sqlPara.Add(new SqlParameter("@TiepVienMoi", emp_moi.TiepVien));

                int n = SqlDataAccessHelper.ExcuteNoneQuery(strSql, sqlPara);
                if (n == 1)
                    result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }
    }
}
